{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 导入用到的包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import tensorflow as tf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "tf.logging.set_verbosity(tf.logging.INFO)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 导入数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From <ipython-input-5-8ef614dae8f3>:1: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "WARNING:tensorflow:From C:\\Users\\43876\\.conda\\envs\\venv\\lib\\site-packages\\tensorflow_core\\contrib\\learn\\python\\learn\\datasets\\mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please write your own downloading logic.\n",
      "WARNING:tensorflow:From C:\\Users\\43876\\.conda\\envs\\venv\\lib\\site-packages\\tensorflow_core\\contrib\\learn\\python\\learn\\datasets\\base.py:252: _internal_retry.<locals>.wrap.<locals>.wrapped_fn (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use urllib or similar directly.\n",
      "Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.\n",
      "WARNING:tensorflow:From C:\\Users\\43876\\.conda\\envs\\venv\\lib\\site-packages\\tensorflow_core\\contrib\\learn\\python\\learn\\datasets\\mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-images-idx3-ubyte.gz\n",
      "Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.\n",
      "WARNING:tensorflow:From C:\\Users\\43876\\.conda\\envs\\venv\\lib\\site-packages\\tensorflow_core\\contrib\\learn\\python\\learn\\datasets\\mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-labels-idx1-ubyte.gz\n",
      "Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.\n",
      "Extracting ./t10k-images-idx3-ubyte.gz\n",
      "Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.\n",
      "Extracting ./t10k-labels-idx1-ubyte.gz\n",
      "WARNING:tensorflow:From C:\\Users\\43876\\.conda\\envs\\venv\\lib\\site-packages\\tensorflow_core\\contrib\\learn\\python\\learn\\datasets\\mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n"
     ]
    }
   ],
   "source": [
    "mnist = input_data.read_data_sets(\"./\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(55000, 784)\n",
      "(55000,)\n",
      "(5000, 784)\n",
      "(5000,)\n",
      "(10000, 784)\n",
      "(10000,)\n"
     ]
    }
   ],
   "source": [
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)\n",
    "\n",
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)\n",
    "\n",
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,8))\n",
    "\n",
    "for idx in range(16):\n",
    "    plt.subplot(4,4,idx+1)\n",
    "    plt.axis('off')\n",
    "    plt.title('[{}]'.format(mnist.train.labels[idx]))\n",
    "    plt.imshow(mnist.train.images[idx].reshape((28,28)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### tensorflow是符号运算，先绘制计算图，然后再运算。首先绘制计算图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = tf.placeholder('float',[None, 784]) # 使用placeholder占位，此时未赋值，后面运算的时候批量赋值\n",
    "y = tf.placeholder('int64', [None])\n",
    "learning_rate = tf.placeholder('float') \n",
    "\n",
    "def initialize(shape, stddev=0.1): #将tf生成张量的truncated_normal设定某个参数后自定义为新的函数方便使用，其中shape是张量的维数\n",
    "    return tf.truncated_normal(shape, stddev=0.1) \n",
    "\n",
    "#这里使用2层的神经网络，输入层是784个维度，第一层（隐层）100个神经元，第二层（输出层）10个输出，对应0~9 十个数字\n",
    "L1_units_count = 100\n",
    "\n",
    "W_1 = tf.Variable(initialize([784, L1_units_count])) #定义输入层和第一层（隐层）连接的权重变量\n",
    "b_1 = tf.Variable(initialize([L1_units_count])) #定义输入层和第一层（隐层）连接的偏置变量\n",
    "logits_1 = tf.matmul(x, W_1)+ b_1 #定义第一层（隐层）的原始logits\n",
    "output_1 = tf.nn.relu(logits_1) #原始logits的激活，这里使用relu，没有使用sigmond作为激活函数\n",
    "\n",
    "L2_units_count =10\n",
    "W_2 = tf.Variable(initialize([L1_units_count, L2_units_count])) #定义第一层（隐层）和输出层的连接的权重变量\n",
    "b_2 = tf.Variable(initialize([L2_units_count])) #定义第一层（隐层）和输出层的连接的权偏置变量\n",
    "logits_2 = tf.matmul(output_1, W_2) + b_2  #定义输出层的原始logits\n",
    "\n",
    "logits =logits_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "cross_entropy_loss = tf.reduce_mean(\n",
    "    tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y)) #定义损失函数——交叉熵损失\n",
    "\n",
    "optimizer = tf.train.GradientDescentOptimizer(\n",
    "    learning_rate=learning_rate).minimize(cross_entropy_loss) #梯度下降法求交叉熵损失函数的极小值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "pred = tf.nn.softmax(logits) #使用softmax函数激活输出层的logits\n",
    "correct_pred = tf.equal(tf.argmax(pred, 1), y) #计算各个输出预测的正确率\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32)) #求正确率的均值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "batch_size = 32  #每批次计算的样本量\n",
    "trainig_step = 10000   #训练的步数\n",
    "\n",
    "saver = tf.train.Saver()  #保存之前训练的结果，可以在之前的结果上接着训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 100 training steps, the loss is 0.539405, the validation accuracy is 0.891\n",
      "after 200 training steps, the loss is 0.309257, the validation accuracy is 0.8986\n",
      "after 300 training steps, the loss is 0.531387, the validation accuracy is 0.8986\n",
      "after 400 training steps, the loss is 0.27581, the validation accuracy is 0.9368\n",
      "after 500 training steps, the loss is 0.381366, the validation accuracy is 0.9388\n",
      "after 600 training steps, the loss is 0.136897, the validation accuracy is 0.9258\n",
      "after 700 training steps, the loss is 0.324557, the validation accuracy is 0.9444\n",
      "after 800 training steps, the loss is 0.158405, the validation accuracy is 0.9448\n",
      "after 900 training steps, the loss is 0.314165, the validation accuracy is 0.953\n",
      "after 1000 training steps, the loss is 0.251356, the validation accuracy is 0.9524\n",
      "after 1100 training steps, the loss is 0.15296, the validation accuracy is 0.9558\n",
      "after 1200 training steps, the loss is 0.0717802, the validation accuracy is 0.9512\n",
      "after 1300 training steps, the loss is 0.101217, the validation accuracy is 0.9548\n",
      "after 1400 training steps, the loss is 0.286012, the validation accuracy is 0.959\n",
      "after 1500 training steps, the loss is 0.228345, the validation accuracy is 0.9586\n",
      "after 1600 training steps, the loss is 0.0897886, the validation accuracy is 0.9644\n",
      "after 1700 training steps, the loss is 0.275548, the validation accuracy is 0.9618\n",
      "after 1800 training steps, the loss is 0.0248945, the validation accuracy is 0.9604\n",
      "after 1900 training steps, the loss is 0.111173, the validation accuracy is 0.9624\n",
      "after 2000 training steps, the loss is 0.136192, the validation accuracy is 0.9496\n",
      "after 2100 training steps, the loss is 0.243549, the validation accuracy is 0.9622\n",
      "after 2200 training steps, the loss is 0.0975294, the validation accuracy is 0.9644\n",
      "after 2300 training steps, the loss is 0.0866614, the validation accuracy is 0.9648\n",
      "after 2400 training steps, the loss is 0.010145, the validation accuracy is 0.9662\n",
      "after 2500 training steps, the loss is 0.0126367, the validation accuracy is 0.9682\n",
      "after 2600 training steps, the loss is 0.214687, the validation accuracy is 0.9656\n",
      "after 2700 training steps, the loss is 0.0254947, the validation accuracy is 0.9678\n",
      "after 2800 training steps, the loss is 0.1067, the validation accuracy is 0.9694\n",
      "after 2900 training steps, the loss is 0.166253, the validation accuracy is 0.968\n",
      "after 3000 training steps, the loss is 0.0194055, the validation accuracy is 0.9652\n",
      "after 3100 training steps, the loss is 0.220843, the validation accuracy is 0.9688\n",
      "after 3200 training steps, the loss is 0.0724002, the validation accuracy is 0.9706\n",
      "after 3300 training steps, the loss is 0.223685, the validation accuracy is 0.9718\n",
      "after 3400 training steps, the loss is 0.15424, the validation accuracy is 0.9698\n",
      "after 3500 training steps, the loss is 0.0653971, the validation accuracy is 0.9676\n",
      "after 3600 training steps, the loss is 0.0311344, the validation accuracy is 0.9636\n",
      "after 3700 training steps, the loss is 0.0579483, the validation accuracy is 0.9698\n",
      "after 3800 training steps, the loss is 0.037944, the validation accuracy is 0.9708\n",
      "after 3900 training steps, the loss is 0.0559765, the validation accuracy is 0.963\n",
      "after 4000 training steps, the loss is 0.0627743, the validation accuracy is 0.9706\n",
      "after 4100 training steps, the loss is 0.0957799, the validation accuracy is 0.9722\n",
      "after 4200 training steps, the loss is 0.0102601, the validation accuracy is 0.971\n",
      "after 4300 training steps, the loss is 0.317459, the validation accuracy is 0.9654\n",
      "after 4400 training steps, the loss is 0.0456215, the validation accuracy is 0.9732\n",
      "after 4500 training steps, the loss is 0.0242025, the validation accuracy is 0.9714\n",
      "after 4600 training steps, the loss is 0.0396606, the validation accuracy is 0.9738\n",
      "after 4700 training steps, the loss is 0.00816512, the validation accuracy is 0.9684\n",
      "after 4800 training steps, the loss is 0.00815771, the validation accuracy is 0.9718\n",
      "after 4900 training steps, the loss is 0.0133056, the validation accuracy is 0.9738\n",
      "after 5000 training steps, the loss is 0.036848, the validation accuracy is 0.9736\n",
      "after 5100 training steps, the loss is 0.0710775, the validation accuracy is 0.9746\n",
      "after 5200 training steps, the loss is 0.0586266, the validation accuracy is 0.9734\n",
      "after 5300 training steps, the loss is 0.0199128, the validation accuracy is 0.9736\n",
      "after 5400 training steps, the loss is 0.141772, the validation accuracy is 0.97\n",
      "after 5500 training steps, the loss is 0.0193649, the validation accuracy is 0.9754\n",
      "after 5600 training steps, the loss is 0.0321005, the validation accuracy is 0.9768\n",
      "after 5700 training steps, the loss is 0.0146182, the validation accuracy is 0.9692\n",
      "after 5800 training steps, the loss is 0.0589347, the validation accuracy is 0.9734\n",
      "after 5900 training steps, the loss is 0.026152, the validation accuracy is 0.9722\n",
      "after 6000 training steps, the loss is 0.0343979, the validation accuracy is 0.9752\n",
      "after 6100 training steps, the loss is 0.00994439, the validation accuracy is 0.9686\n",
      "after 6200 training steps, the loss is 0.0934167, the validation accuracy is 0.9694\n",
      "after 6300 training steps, the loss is 0.0360149, the validation accuracy is 0.975\n",
      "after 6400 training steps, the loss is 0.00568696, the validation accuracy is 0.9736\n",
      "after 6500 training steps, the loss is 0.125398, the validation accuracy is 0.9732\n",
      "after 6600 training steps, the loss is 0.104061, the validation accuracy is 0.9734\n",
      "after 6700 training steps, the loss is 0.0504069, the validation accuracy is 0.9772\n",
      "after 6800 training steps, the loss is 0.00809006, the validation accuracy is 0.9736\n",
      "after 6900 training steps, the loss is 0.0906952, the validation accuracy is 0.9762\n",
      "after 7000 training steps, the loss is 0.0564481, the validation accuracy is 0.9764\n",
      "after 7100 training steps, the loss is 0.0211061, the validation accuracy is 0.974\n",
      "after 7200 training steps, the loss is 0.0588041, the validation accuracy is 0.9794\n",
      "after 7300 training steps, the loss is 0.0020388, the validation accuracy is 0.974\n",
      "after 7400 training steps, the loss is 0.0276518, the validation accuracy is 0.9772\n",
      "after 7500 training steps, the loss is 0.00632922, the validation accuracy is 0.9766\n",
      "after 7600 training steps, the loss is 0.00421741, the validation accuracy is 0.9774\n",
      "after 7700 training steps, the loss is 0.0184144, the validation accuracy is 0.9774\n",
      "after 7800 training steps, the loss is 0.0183935, the validation accuracy is 0.973\n",
      "after 7900 training steps, the loss is 0.00322444, the validation accuracy is 0.9772\n",
      "after 8000 training steps, the loss is 0.114846, the validation accuracy is 0.9752\n",
      "after 8100 training steps, the loss is 0.00160371, the validation accuracy is 0.9762\n",
      "after 8200 training steps, the loss is 0.0428126, the validation accuracy is 0.9714\n",
      "after 8300 training steps, the loss is 0.0443272, the validation accuracy is 0.9746\n",
      "after 8400 training steps, the loss is 0.112213, the validation accuracy is 0.9738\n",
      "after 8500 training steps, the loss is 0.0590296, the validation accuracy is 0.9764\n",
      "after 8600 training steps, the loss is 0.0337403, the validation accuracy is 0.977\n",
      "after 8700 training steps, the loss is 0.00644638, the validation accuracy is 0.977\n",
      "after 8800 training steps, the loss is 0.0768945, the validation accuracy is 0.9756\n",
      "after 8900 training steps, the loss is 0.0175077, the validation accuracy is 0.9772\n",
      "after 9000 training steps, the loss is 0.0380632, the validation accuracy is 0.977\n",
      "after 9100 training steps, the loss is 0.00359342, the validation accuracy is 0.9758\n",
      "after 9200 training steps, the loss is 0.0421785, the validation accuracy is 0.977\n",
      "after 9300 training steps, the loss is 0.0605867, the validation accuracy is 0.9772\n",
      "after 9400 training steps, the loss is 0.027906, the validation accuracy is 0.975\n",
      "after 9500 training steps, the loss is 0.0040592, the validation accuracy is 0.9768\n",
      "after 9600 training steps, the loss is 0.00389391, the validation accuracy is 0.9764\n",
      "after 9700 training steps, the loss is 0.0235826, the validation accuracy is 0.9764\n",
      "after 9800 training steps, the loss is 0.037369, the validation accuracy is 0.9776\n",
      "after 9900 training steps, the loss is 0.0316092, the validation accuracy is 0.9766\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the training is finish!\n",
      "the test accuarcy is: 0.9735\n"
     ]
    }
   ],
   "source": [
    "with tf.Session() as sess:   #建立session\n",
    "    sess.run(tf.global_variables_initializer())  #运行计算图\n",
    "\n",
    "    #定义验证集与测试集\n",
    "    validate_data = {\n",
    "        x: mnist.validation.images,\n",
    "        y: mnist.validation.labels,\n",
    "    }\n",
    "    test_data = {x: mnist.test.images, y: mnist.test.labels}\n",
    "\n",
    "    for i in range(trainig_step):\n",
    "        xs, ys = mnist.train.next_batch(batch_size)\n",
    "        _, loss = sess.run(\n",
    "            [optimizer, cross_entropy_loss],\n",
    "            feed_dict={\n",
    "                x: xs,\n",
    "                y: ys,\n",
    "                learning_rate: 0.3\n",
    "            })\n",
    "\n",
    "        #每100次训练打印一次损失值与验证准确率\n",
    "        if i > 0 and i % 100 == 0:\n",
    "            validate_accuracy = sess.run(accuracy, feed_dict=validate_data)\n",
    "            print(\n",
    "                \"after %d training steps, the loss is %g, the validation accuracy is %g\"\n",
    "                % (i, loss, validate_accuracy))\n",
    "            saver.save(sess, './model.ckpt', global_step=i)\n",
    "\n",
    "    print(\"the training is finish!\")\n",
    "    #最终的测试准确率\n",
    "    acc = sess.run(accuracy, feed_dict=test_data)\n",
    "    print(\"the test accuarcy is:\", acc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from ./model.ckpt-9900\n",
      "0.9375\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    ckpt = tf.train.get_checkpoint_state('./')\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess, ckpt.model_checkpoint_path)\n",
    "        final_pred, acc = sess.run(\n",
    "            [pred, accuracy],\n",
    "            feed_dict={\n",
    "                x: mnist.test.images[:16],\n",
    "                y: mnist.test.labels[:16]\n",
    "            })\n",
    "        orders = np.argsort(final_pred)\n",
    "        plt.figure(figsize=(8, 8))\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order = orders[idx, :][-1]\n",
    "            prob = final_pred[idx, :][order]\n",
    "            plt.subplot(4, 4, idx + 1)\n",
    "            plt.axis('off')\n",
    "            plt.title('{}: [{}]-[{:.1f}%]'.format(mnist.test.labels[idx],\n",
    "                                                  order, prob * 100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28, 28)))\n",
    "\n",
    "    else:\n",
    "        pass"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 为什么这里模型的训练效果比较差呢？因为学习率是固定的，而且值比较大？"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "venv",
   "language": "python",
   "name": "venv"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
